package com.test34_类加载器;

import org.junit.Test;

/**
 * ClassLoader，类加载器
 */
public class Demo01_ClassLoader {

    /**
     * 系统类的类加载器
     * Bootstrap，启动类加载器
     */
    @Test
    public void test1() {
        String message = "www.yootk.com";
        System.out.println(message.getClass().getClassLoader());    // null(Bootstrap)
        System.out.println(double.class.getClassLoader());
        System.out.println(Object.class.getClassLoader());
    }

    /**
     * 获取父加载器
     * Bootstrap，启动类加载器
     * PlatformClassLoader，平台类加载器（JDK1.8及以前：ExtClassLoader，扩展类加载器）
     * AppClassLoader，应用程序类加载器
     */
    @Test
    public void test2() {
        Class<?> clazz = Book.class;
        System.out.println(clazz.getClassLoader());     // AppClassLoader
        System.out.println(clazz.getClassLoader().getParent());     // ExtClassLoader
        System.out.println(clazz.getClassLoader().getParent().getParent());     // null(Bootstrap)
    }

    @Test
    public void test3() {
        ClassLoader loader = Book.class.getClassLoader();
        while (loader != null) {
            System.out.println(loader);
            loader = loader.getParent();
        }
    }
}

class Book {
}
